/*
		sizeof与strlen的对比

		夏思成

		2024年3月24日

		西科大十五号公寓楼
*/

#include <stdio.h>
#include <string.h>

//如果字符串中间存在'\0'，则strlen会提前停止。
int main()
{
	char string[] = "abc\0def";
	size_t len = strlen(string);
	printf("%zd\n", len);
	return 0;
}


//int main()
//{
//	char string1[] = { 'w','o','r','l','d' };//1
//	char string2[] = "world";//2
//	size_t len1 = strlen(string1);
//	size_t len2 = strlen(string2);
//	printf("%zd %zd\n", len1,len2);
//	return 0;
//}


////strlen(),求从传过去的字符串地址开始，向后开始数，知道遇到第一个'\0'后停止，统计遇到的字符个数
////使用strlen函数要包含头文件<string.h>
//int main()
//{
//	char string[] = "abcdef";
//	size_t len = strlen(string);
//	printf("%zd\n", len);
//	return 0;
//}



//利用sizeof遇到数组名的特殊，可以求数组的长度
//int main()
//{
//	int nums[] = { 1,2,4,2,5,6,76,3,7543,55,3534,32 };
//	size_t numsSize = sizeof(nums) / sizeof(nums[0]);
//	printf("%zd\n", numsSize);
//	return 0;
//}


//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	size_t a = sizeof(arr);//当sizeof()的参数为数组名的时候，求的就是整个数组的大小，单位为字节。
//	size_t b = sizeof(arr[0]);//当sizeof()的参数为数组中的一个元素的时候，求得就是该元素类型的大小。
//	//arr有10个元素，每个元素四个字节，所以a 的值就是4*10 = 40
//	printf("%zd %zd\n", a, b);
//	return 0;
//}





//int main()
//{
//	int a = 10;
//	int b = 1;
//	size_t c = sizeof(a = a + b);//sizeof()不会计算参数内的表达式，只会推断表达式结果的类型
//	printf("a = %d %zd\n", a, c);
//	return 0;
//}





//int main()
//{
//	int a = 10;
//	size_t b = sizeof(a);//a的类型是int型，在内存中占四个字节，所以结果为4
//	size_t c = sizeof(int);//int类型的数据在内存中占四个字节，所以结果也是4
//	printf("%d %d\n", b, c);
//}